package org.jsola.hr.service;


import org.jsola.admin.vo.AllPermissionVO;
import org.jsola.user.core.TokenUser;

/**
 * @author zhr
 */
public interface IHrPermissionService {

    /**
     * 验证用户是否拥有某个对象的权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param subjectId 业务ID
     * @param subjectType 业务类型
     * @return 拥有权限：true，否则false
     */
    boolean hasRight(String userId, String siteId, String subjectId, String subjectType);

    /**
     * 验证用户是否拥有指定权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param permissionString 权限字符串 如site:product.manager:save:1
     * @return 拥有权限：true，否则false
     */
    boolean hasRight(String userId, String siteId, String permissionString);

    /**
     * 验证用户是否拥有所有指定权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param permissionString 权限字符串 如site:product.manager:save:1
     * @return 拥有权限：true，否则false
     */
    boolean hasAllRight(String userId, String siteId, String... permissionString);

    /**
     * 验证用户是否拥有以下指定权限的某一个权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param permissionString 权限字符串 如site:product.manager:save:1
     * @return 拥有权限：true，否则false
     */
    boolean hasAnyRight(String userId, String siteId, String... permissionString);

    /**
     * 验证用户是否拥有某个实例指定权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param subjectId 业务ID
     * @param permissionString 权限字符串 如site:product.manager:save 不能添加实例
     * @return 拥有权限：true，否则false
     */
    boolean hasObjRight(String userId, String siteId, String subjectId, String permissionString);


    /**
     * 验证用户是否拥有某个实例所有指定权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param subjectId 业务ID
     * @param permissionString 权限字符串 如site:product.manager:save 不能添加实例
     * @return 拥有权限：true，否则false
     */
    boolean hasObjAllRight(String userId, String siteId, String subjectId, String... permissionString);

    /**
     * 验证用户是否拥有某个实例以下指定权限的某一个权限
     * @param userId 用户id
     * @param siteId 站点id
     * @param subjectId 业务ID
     * @param permissionString 权限字符串 如site:product.manager:save 不能添加实例
     * @return 拥有权限：true，否则false
     */
    boolean hasObjAnyRight(String userId, String siteId, String subjectId, String... permissionString);

    /**
     * 验证用户是否是该对象的管理员
     * @param userId 用户id
     * @param siteId 站点id
     * @return 是管理员：true，否则false
     */
    boolean isAdmin(String userId, String siteId);

    /**
     * 验证用户是否是该对象的管理员,会校验用户不属于某个组，不添加该组权限
     * @param userId 用户id
     * @param siteId 站点id
     * @return 是管理员：true，否则false
     */
    boolean isAdminValidaGroup(String userId, String siteId);


    /**
     * 用户是否是总公司的管理员
     *
     * @param userId 用户id
     * @param siteId 站点id
     * @return 是管理员：true，否则false
     */
    boolean isSuperCompanyAdmin(String userId, String siteId);

    /**
     * 用户权限列表
     *
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 权限列表
     */
    AllPermissionVO listUserPermission(String companyId, TokenUser tokenUser);

    /**
     * 用户权限列表 小程序登录使用 查询站点需要有员工
     *
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 权限列表
     */
    AllPermissionVO listUserPermissionForApp(String companyId, TokenUser tokenUser);

}


